perm filename HAIR[E83,JMC] blob
sn#729827 filedate 1983-11-06 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .require "memo.pub[let,jmc]" source
C00007 ENDMK
C⊗;
.require "memo.pub[let,jmc]" source;
.cb The use of non-computable predicates in AI programs
.<<hair[e83,jmc]>>
Most of the predicates used in AI programs are computable
or retrievable, i.e. when we build the system we undertake to
provide means of determining whether the predicate is true
or false for given arguments. This sometimes gives rise to
the mistaken idea that the practical decidability of a predicate
is necessary for it to be useful in AI. Some even go so far
as to regard predicates as defined only in so far as a means
is provided for computing them. This is reinforced by the
fact that in Prolog (or Microplanner), the predicates in
programs are decidable.
However, consider the predicate %2hair(x,p)%1 meaning
that ⊗x is a hair on the head of the person ⊗p. Let us further
suppose that our program has no way of indexing over the hairs
on a person's head. Thus our data base has no instances
%2hair(H1,P), hair(H2,P)%1, etc. What use can the
predicate %2hair(x,p)%1 be to a program?
Suppose now we define the predicate %2white-haired(p)%1
by
!!a1: %2∀p.white-haired(p) ≡ ∀x.(hair(x,p) ⊃ white(x))%1.
If %2hair(x,p)%1 and %2white(x)%1 were computable we could replace {eq a1} by
the Prolog program
****
However, unless we provide a means of generating the instances of
%2hair(x,p)%1, the program will call everyone white haired.
Here are some uses for %2hair(x,p)%1 in ordinary human
reasoning.
1.
****
Another example may be more realistic. Suppose we call a
container sterile if all the bacteria in it are dead. We can write
this
!!a2: %2∀c.sterile(c) ≡ ∀x.bacterium(x) ∧ in(x,c) ⊃ dead(x)%1,
but you may write it some other way if a different notation is better for
your reasoning program. Next we express the facts that if a culture
medium is put in the container a bacterium will give rise to a colony
and that colonies are visible. If our reasoning program can handle
Now let our reasoning program be given the goal of determining whether
a container ⊗C is sterile. It should be able to use {eq a2} to decide
to add culture medium to ⊗C and look for colonies.
Besides telling whether a container is sterile, we want to
be able to sterilize a container. Here we need to use the fact,
for example, that sufficient heat kills bacteria.
Come to think of it, we may also want to use the definition
of sterility in other ways. We may use it to explain a disease,
to explain the absence of disease or as part of an explanation
of a complicated set of events such as a prosecution of a restaurant
proprietor by the County Health Department. It would be worthwhile
to do some examples in which a fact (not necessarily one of this
non-computable character) is used in a wide variety of ways.